[i18n][forensics] Add missing routes Bug: 448189547 Change-Id: I1b40b62baa26f04c6af10bdc87bf7c7126f037b4 Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/1388997 Reviewed-by: Emircan Uysaler <emircan@google.com> Fuchsia-Auto-Submit: Gary Bressler <geb@google.com> Reviewed-by: Aidan Wolter <awolter@google.com> Commit-Queue: Gary Bressler <geb@google.com> Reviewed-by: Filip Filmar <fmil@google.com> Reviewed-by: Thomas Gales <tgales@google.com> 
diff --git a/bundles/assembly/BUILD.gn b/bundles/assembly/BUILD.gn index e8ea02f..abf6ba3 100644 --- a/bundles/assembly/BUILD.gn +++ b/bundles/assembly/BUILD.gn 
@@ -1601,6 +1601,10 @@  ]  }   +assembly_input_bundle("no_remote_feedback_id") { + core_shards = [ "//src/developer/forensics/feedback_id/meta/no_remote_feedback_id.core_shard.cml" ] +} +  assembly_input_bundle("feedback_large_disk") {  config_data_labels =  [ "//src/developer/forensics:feedback_large_disk_product_config" ] @@ -3922,6 +3926,11 @@  deps = qemu_boot_shim.deps  }   +assembly_input_bundle("no_intl_timezones") { + core_shards = + [ "//src/intl/intl_services/meta/no_intl_timezones.core_shard.cml" ] +} +  # Assembly may select at most one bundle with `intl_services` name prefix.  icu_assembly_input_bundle("intl_services") {  icu_base_packages = [ "//src/intl/intl_services:pkg" ] 
diff --git a/bundles/assembly/platform_aibs.gni b/bundles/assembly/platform_aibs.gni index 7293220..ac005d3 100644 --- a/bundles/assembly/platform_aibs.gni +++ b/bundles/assembly/platform_aibs.gni 
@@ -309,6 +309,9 @@  "factory_data",  "storage_cache_manager",   + # I18n + "no_intl_timezones", +  # ICU-specific version of intl_services    "intl_services.icu_default_${icu_git_info.default}", @@ -342,6 +345,7 @@  "power_metrics_recorder",    # Forensics + "no_remote_feedback_id",  "feedback_large_disk",  "feedback_remote_device_id_provider",  "feedback_user_config", 
diff --git a/src/developer/forensics/feedback_id/meta/no_remote_feedback_id.core_shard.cml b/src/developer/forensics/feedback_id/meta/no_remote_feedback_id.core_shard.cml new file mode 100644 index 0000000..3b2ee80 --- /dev/null +++ b/src/developer/forensics/feedback_id/meta/no_remote_feedback_id.core_shard.cml 
@@ -0,0 +1,23 @@ +// Copyright 2025 The Fuchsia Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +{ + offer: [ + { + protocol: [ + "google.deviceproperty.Reader", + "google.deviceproperty.Writer", + "google.flashts.Reader", + ], + from: "void", + to: "#session-manager", + availability: "optional", + }, + { + protocol: "fuchsia.feedback.DeviceIdProvider", + from: "void", + to: "#feedback", + availability: "optional", + }, + ], +} 
diff --git a/src/developer/forensics/feedback_id/sysinfo/meta/sysinfo_feedback_id.core_shard.cml.template b/src/developer/forensics/feedback_id/sysinfo/meta/sysinfo_feedback_id.core_shard.cml.template index a70e800..8ecdd8c 100644 --- a/src/developer/forensics/feedback_id/sysinfo/meta/sysinfo_feedback_id.core_shard.cml.template +++ b/src/developer/forensics/feedback_id/sysinfo/meta/sysinfo_feedback_id.core_shard.cml.template 
@@ -19,6 +19,16 @@  protocol: "fuchsia.sysinfo.SysInfo",  from: "parent",  to: "#feedback_id", - } + }, + { + protocol: [ + "google.deviceproperty.Reader", + "google.deviceproperty.Writer", + "google.flashts.Reader", + ], + from: "void", + to: "#session-manager", + availability: "optional", + },  ],  } 
diff --git a/src/intl/intl_services/meta/no_intl_timezones.core_shard.cml b/src/intl/intl_services/meta/no_intl_timezones.core_shard.cml new file mode 100644 index 0000000..934a02c --- /dev/null +++ b/src/intl/intl_services/meta/no_intl_timezones.core_shard.cml 
@@ -0,0 +1,13 @@ +// Copyright 2025 The Fuchsia Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +{ + offer: [ + { + protocol: "fuchsia.intl.TimeZones", + from: "void", + to: "#session-manager", + availability: "optional", + }, + ], +} 
diff --git a/src/lib/assembly/platform_configuration/src/subsystems.rs b/src/lib/assembly/platform_configuration/src/subsystems.rs index 26e6ac8..efa53a3 100644 --- a/src/lib/assembly/platform_configuration/src/subsystems.rs +++ b/src/lib/assembly/platform_configuration/src/subsystems.rs 
@@ -501,7 +501,7 @@    forensics::ForensicsSubsystem::define_configuration(  &context_base.for_subsystem("forensics"), - &platform.forensics, + &(&platform.forensics, &platform.session),  builder,  )  .context("Configuring the 'Forensics' subsystem")?; 
diff --git a/src/lib/assembly/platform_configuration/src/subsystems/forensics.rs b/src/lib/assembly/platform_configuration/src/subsystems/forensics.rs index dd4872d..e5f0111 100644 --- a/src/lib/assembly/platform_configuration/src/subsystems/forensics.rs +++ b/src/lib/assembly/platform_configuration/src/subsystems/forensics.rs 
@@ -10,15 +10,20 @@  use assembly_config_schema::platform_settings::forensics_config::{  FeedbackIdComponentUrl, ForensicsConfig,  }; +use assembly_config_schema::platform_settings::session_config::PlatformSessionConfig;  use assembly_constants::{FileEntry, PackageDestination, PackageSetDestination};    pub(crate) struct ForensicsSubsystem; -impl DefineSubsystemConfiguration<ForensicsConfig> for ForensicsSubsystem { +impl DefineSubsystemConfiguration<(&ForensicsConfig, &PlatformSessionConfig)> + for ForensicsSubsystem +{  fn define_configuration(  context: &ConfigurationContext<'_>, - config: &ForensicsConfig, + platform_config: &(&ForensicsConfig, &PlatformSessionConfig),  builder: &mut dyn ConfigurationBuilder,  ) -> anyhow::Result<()> { + let (config, session_config) = *platform_config; +  if config.feedback.large_disk {  builder.platform_bundle("feedback_large_disk");  } @@ -108,7 +113,11 @@  builder,  )?;  } - FeedbackIdComponentUrl::None => {} + FeedbackIdComponentUrl::None => { + if session_config.enabled { + builder.platform_bundle("no_remote_feedback_id"); + } + }  }    Ok(()) @@ -143,9 +152,13 @@  };    let forensics_config: ForensicsConfig = Default::default(); + let session_config: PlatformSessionConfig = Default::default();  let mut builder: ConfigurationBuilderImpl = Default::default(); - let result = - ForensicsSubsystem::define_configuration(&context, &forensics_config, &mut builder); + let result = ForensicsSubsystem::define_configuration( + &context, + &(&forensics_config, &session_config), + &mut builder, + );  assert!(result.is_ok());  assert!(builder.build().bundles.contains("feedback_userdebug_config"));  } @@ -170,9 +183,13 @@  };    let forensics_config: ForensicsConfig = Default::default(); + let session_config: PlatformSessionConfig = Default::default();  let mut builder: ConfigurationBuilderImpl = Default::default(); - let result = - ForensicsSubsystem::define_configuration(&context, &forensics_config, &mut builder); + let result = ForensicsSubsystem::define_configuration( + &context, + &(&forensics_config, &session_config), + &mut builder, + );    assert!(result.is_err());  } @@ -197,9 +214,13 @@  };    let forensics_config: ForensicsConfig = Default::default(); + let session_config: PlatformSessionConfig = Default::default();  let mut builder: ConfigurationBuilderImpl = Default::default(); - let result = - ForensicsSubsystem::define_configuration(&context, &forensics_config, &mut builder); + let result = ForensicsSubsystem::define_configuration( + &context, + &(&forensics_config, &session_config), + &mut builder, + );    assert!(result.is_err());  } @@ -229,9 +250,13 @@  },  ..Default::default()  }; + let session_config: PlatformSessionConfig = Default::default();  let mut builder: ConfigurationBuilderImpl = Default::default(); - let result = - ForensicsSubsystem::define_configuration(&context, &forensics_config, &mut builder); + let result = ForensicsSubsystem::define_configuration( + &context, + &(&forensics_config, &session_config), + &mut builder, + );    assert!(result.is_ok());  assert!( @@ -267,9 +292,13 @@  },  ..Default::default()  }; + let session_config: PlatformSessionConfig = Default::default();  let mut builder: ConfigurationBuilderImpl = Default::default(); - let result = - ForensicsSubsystem::define_configuration(&context, &forensics_config, &mut builder); + let result = ForensicsSubsystem::define_configuration( + &context, + &(&forensics_config, &session_config), + &mut builder, + );    assert!(result.is_ok());  assert!( 
diff --git a/src/lib/assembly/platform_configuration/src/subsystems/intl.rs b/src/lib/assembly/platform_configuration/src/subsystems/intl.rs index f793a2a..db77b17 100644 --- a/src/lib/assembly/platform_configuration/src/subsystems/intl.rs +++ b/src/lib/assembly/platform_configuration/src/subsystems/intl.rs 
@@ -58,7 +58,14 @@  .icu_platform_bundle("intl_services_small_with_timezone")  .context("while configuring the 'small Intl with timezone' subsystem")?;  } - Type::None => { /* Skip the bundle altogether. */ } + Type::None => { + if session_config.enabled { + builder.platform_bundle("no_intl_timezones"); + } else { + // Since there's no session-manager there's no need to add the "void" + // route. + } + }  }    if config.include_zoneinfo_files { 
diff --git a/src/ui/a11y/bin/a11y_manager/meta/a11y_manager.cml b/src/ui/a11y/bin/a11y_manager/meta/a11y_manager.cml index fff667e..0a0c95b 100644 --- a/src/ui/a11y/bin/a11y_manager/meta/a11y_manager.cml +++ b/src/ui/a11y/bin/a11y_manager/meta/a11y_manager.cml 
@@ -30,7 +30,6 @@  {  protocol: [  "fuchsia.feedback.LastRebootInfoProvider", - "fuchsia.intl.PropertyProvider",  "fuchsia.settings.Accessibility",  "fuchsia.ui.annotation.Registry",  "fuchsia.ui.composition.Flatland", @@ -41,6 +40,10 @@  "fuchsia.ui.pointerinjector.Registry",  ],  }, + { + protocol: [ "fuchsia.intl.PropertyProvider" ], + availability: "optional", + },  ],  expose: [  { 
diff --git a/src/ui/meta/a11y_routes.shard.cml b/src/ui/meta/a11y_routes.shard.cml index e8b8b03..5f34274 100644 --- a/src/ui/meta/a11y_routes.shard.cml +++ b/src/ui/meta/a11y_routes.shard.cml 
@@ -39,11 +39,16 @@  {  protocol: [  "fuchsia.feedback.LastRebootInfoProvider", - "fuchsia.intl.PropertyProvider",  "fuchsia.settings.Accessibility",  ],  from: "parent", - to: [ "#a11y_manager" ], + to: "#a11y_manager", + }, + { + protocol: [ "fuchsia.intl.PropertyProvider" ], + from: "parent", + to: "#a11y_manager", + availability: "optional",  },  ],  } 
diff --git a/src/ui/meta/ui.cml b/src/ui/meta/ui.cml index a54448d..ee41caf 100644 --- a/src/ui/meta/ui.cml +++ b/src/ui/meta/ui.cml 
@@ -16,6 +16,7 @@  protocol: [ "fuchsia.media.sounds.Player" ],  from: "parent",  to: [ "#scene_manager" ], + availability: "optional",  },  {  protocol: [